#ifndef __sx1276_gpio_h
#define __sx1276_gpio_h

#include "stm32f10x_gpio.h"
#include <stdint.h>

#define RXTX_PORT       		GPIOD
#define RXTX_PIN  				GPIO_Pin_2
#define RXTX_CLOCK  			RCC_APB2Periph_GPIOD
#define RXTX_HIGH()         	GPIO_SetBits(RXTX_PORT,RXTX_PIN)
#define RXTX_LOW()          	GPIO_ResetBits(RXTX_PORT,RXTX_PIN)
#define RXTX_STATE()        	GPIO_ReadOutputDataBit(RXTX_PORT,RXTX_PIN)

#define RXE_PORT       			GPIOB
#define RXE_PIN  				GPIO_Pin_5
#define RXE_CLOCK  				RCC_APB2Periph_GPIOB
#define RXE_HIGH()         		GPIO_SetBits(RXE_PORT,RXE_PIN)
#define RXE_LOW()          		GPIO_ResetBits(RXE_PORT,RXE_PIN)
#define RXE_STATE()        		GPIO_ReadOutputDataBit(RXE_PORT,RXE_PIN)

#define TXE_PORT       			GPIOB
#define TXE_PIN  				GPIO_Pin_6
#define TXE_CLOCK  				RCC_APB2Periph_GPIOB
#define TXE_HIGH()         		GPIO_SetBits(TXE_PORT,TXE_PIN)
#define TXE_LOW()          		GPIO_ResetBits(TXE_PORT,TXE_PIN)
#define TXE_STATE()        		GPIO_ReadOutputDataBit(TXE_PORT,TXE_PIN)

#define RST_PORT          		GPIOA
#define RST_PIN           		GPIO_Pin_2
#define RST_CLOCK        		RCC_APB2Periph_GPIOA
#define RST_HIGH()          	GPIO_SetBits(RST_PORT,RST_PIN)
#define RST_LOW()       		GPIO_ResetBits(RST_PORT,RST_PIN)
#define RST_STATE()		    	GPIO_ReadOutputDataBit(RST_PORT,RST_PIN)

#define IOVCC_PORT          	GPIOB
#define IOVCC_PIN           	GPIO_Pin_8
#define IOVCC_CLOCK        		RCC_APB2Periph_GPIOB
#define IOVCC_HIGH()          	GPIO_SetBits(IOVCC_PORT,IOVCC_PIN)
#define IOVCC_LOW()       		GPIO_ResetBits(IOVCC_PORT,IOVCC_PIN)
#define IOVCC_STATE()		    GPIO_ReadOutputDataBit(IOVCC_PORT,IOVCC_PIN)

#define HAL_SPI                 SPI1
#define HAL_PORT_SPI            GPIOA
#define HAL_PORT_CLOCK          RCC_APB2Periph_GPIOA
#define HAL_PIN_SCK             GPIO_Pin_5
#define HAL_PIN_MISO            GPIO_Pin_6
#define HAL_PIN_MOSI            GPIO_Pin_7

#define HAL_PORT_SS             GPIOA
#define HAL_SS_CLOCK            RCC_APB2Periph_GPIOA
#define HAL_PIN_SS              GPIO_Pin_4
#define HAL_SS_HIGH()           GPIO_SetBits(HAL_PORT_SS,HAL_PIN_SS)
#define HAL_SS_LOW()            GPIO_ResetBits(HAL_PORT_SS,HAL_PIN_SS)

#define DIO0_IOPORT             GPIOC
#define DIO0_PIN                GPIO_Pin_0
#define DIO0_CLOCK  			RCC_APB2Periph_GPIOC
#define DIO0_HIGH()         	GPIO_SetBits(DIO0_IOPORT,DIO0_PIN)
#define DIO0_LOW()          	GPIO_ResetBits(DIO0_IOPORT,DIO0_PIN)
#define DIO0_STATE()        	GPIO_ReadOutputDataBit(DIO0_IOPORT,DIO0_PIN)

#define DIO1_IOPORT             GPIOC
#define DIO1_PIN                GPIO_Pin_1
#define DIO1_CLOCK  			RCC_APB2Periph_GPIOC
#define DIO1_HIGH()         	GPIO_SetBits(DIO1_IOPORT,DIO1_PIN)
#define DIO1_LOW()          	GPIO_ResetBits(DIO1_IOPORT,DIO1_PIN)
#define DIO1_STATE()        	GPIO_ReadOutputDataBit(DIO1_IOPORT,DIO1_PIN)

#define DIO2_IOPORT             GPIOC
#define DIO2_PIN                GPIO_Pin_2
#define DIO2_CLOCK  			RCC_APB2Periph_GPIOC
#define DIO2_HIGH()         	GPIO_SetBits(DIO2_IOPORT,DIO2_PIN)
#define DIO2_LOW()          	GPIO_ResetBits(DIO2_IOPORT,DIO2_PIN)
#define DIO2_STATE()        	GPIO_ReadOutputDataBit(DIO2_IOPORT,DIO2_PIN)

#define DIO3_IOPORT             GPIOC
#define DIO3_PIN                GPIO_Pin_3
#define DIO3_CLOCK  			RCC_APB2Periph_GPIOC
#define DIO3_HIGH()         	GPIO_SetBits(DIO3_IOPORT,DIO3_PIN)
#define DIO3_LOW()          	GPIO_ResetBits(DIO3_IOPORT,DIO3_PIN)
#define DIO3_STATE()        	GPIO_ReadOutputDataBit(DIO3_IOPORT,DIO3_PIN)

#define DIO4_IOPORT             GPIOC
#define DIO4_PIN                GPIO_Pin_4
#define DIO4_CLOCK  		    RCC_APB2Periph_GPIOC
#define DIO4_HIGH()         	GPIO_SetBits(DIO4_IOPORT,DIO4_PIN)
#define DIO4_LOW()          	GPIO_ResetBits(DIO4_IOPORT,DIO4_PIN)
#define DIO4_STATE()        	GPIO_ReadOutputDataBit(DIO4_IOPORT,DIO4_PIN)

#define DIO5_IOPORT             GPIOC
#define DIO5_PIN                GPIO_Pin_5
#define DIO5_CLOCK  			RCC_APB2Periph_GPIOC
#define DIO5_HIGH()         	GPIO_SetBits(DIO5_IOPORT,DIO5_PIN)
#define DIO5_LOW()          	GPIO_ResetBits(DIO5_IOPORT,DIO5_PIN)
#define DIO5_STATE()        	GPIO_ReadOutputDataBit(DIO5_IOPORT,DIO5_PIN)

void USART1_Configuration(uint32_t baudrate);
#endif //__sx1276_gpio_h
